7. Control EDIT

7. Control EDIT

7.1. Fichero de recursos

La clase de control es EDIT y en el fichero de recursos se ha de añadir dentro del bloque BEGIN......END donde se ponen los controles del diálogo:

//(...)
BEGIN
// control  "texto a mostrar", ID, clase, estilos, x, y, ancho, alto
 CONTROL "Texto:", -1, "STATIC",  SS_LEFT | WS_CHILD | WS_VISIBLE,  8, 9, 28, 8

 CONTROL "", ID_TEXTO, "EDIT",  ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,  36, 9, 76, 12

 CONTROL "Aceptar", IDOK, "BUTTON",   BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP,  56, 26, 50, 14
END)
//(...)
BEGIN
// control  "texto a mostrar", ID, clase, estilos, x, y, ancho, alto
 CONTROL "Texto:", -1, "STATIC",  SS_LEFT | WS_CHILD | WS_VISIBLE,  8, 9, 28, 8

 CONTROL "", ID_TEXTO, "EDIT",  ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,  36, 9, 76, 12

 CONTROL "Aceptar", IDOK, "BUTTON",   BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP,  56, 26, 50, 14
END)

El primer parámetro después de CONTROL es el texto que saldrá dentro del campo (en este caso, nada)

ES_ Edit Style alineación a la izquierda

WS_ Window Style ventana hija, con borde fino, y con parada de tabulador

7.2. El procedimiento de diálogo y los controles edit

Los controles Edit generan mensajes de comando WM_COMMAND por lo que hay que asegurar que no se confunden con el mensaje del botón aceptar:

case WM_COMMAND:
    if (LOWORD(wParam) == IDOK) 
    {
        EndDialog(hDlg, FALSE);  // clic en "aceptar" cierra el dlg
    }
    return TRUE;
case WM_COMMAND:
    if (LOWORD(wParam) == IDOK) 
    {
        EndDialog(hDlg, FALSE);  // clic en "aceptar" cierra el dlg
    }
    return TRUE;

En la carga del diálogo (mensaje WM_INITDIALOG) hacemos que el foco recaiga sobre el campo de texto y devolvemos FALSE para indicar que hemos dado un foco de forma explícita:

 case WM_INITDIALOG:
           SetFocus(GetDlgItem(hDlg, ID_TEXTO));
           return FALSE;
 case WM_INITDIALOG:
           SetFocus(GetDlgItem(hDlg, ID_TEXTO));
           return FALSE;

Para hacer eso usaremos la función SetFocus,que requiere como parámetro el manipulador de ventana del control que debe recibir el foco, este manipulador lo conseguimos con la función GetDlgItem, que a su vez necesita como parámetros un manipulador del diálogo y el identificador del control.

TBD PDTE